package com.quark.cloud.web.service;

import java.util.List;

import net.sf.json.JSONArray;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import com.quark.cloud.web.vo.Sekill;

@Service
public class SekillService {
    private Logger log = LoggerFactory.getLogger(SekillService.class);
	@Autowired
	private RestTemplate restTemplate;
	private static final String SERVICE_NAME = "mywebapp";

	/**
	 * 这里使用了断路器，就是@HystrixCommand注解。断路器的基本作用就是@HystrixCommand注解的方法失败后，
	 * 系统将自动切换到fallbackMethod方法执行。断路器Hystrix具备回退机制、请求缓存和请求打包以及监控和配置等功能，
	 * 在这里我们只是使用了它的核心功能：回退机制，使用该功能允许你快速失败并迅速恢复或者回退并优雅降级。
	 * @return
	 */
	@SuppressWarnings({ "static-access", "unchecked" })
	//@HystrixCommand(fallbackMethod = "fallbackSearchAll")
	public List<Sekill> searchAll() {
		String json =restTemplate.getForObject("http://" + SERVICE_NAME + "/sekill/1/4/all/rest",String.class);
		log.debug(json);
		JSONArray jSONArray = JSONArray.fromObject(json);
		return (List<Sekill>)jSONArray.toCollection(jSONArray, Sekill.class);
	}

//	private List<Sekill> fallbackSearchAll() {
//		System.out.println("HystrixCommand fallbackMethod handle!");
//		List<Sekill> ls = new ArrayList<Sekill>();
//		Sekill sekill = new Sekill();
//		sekill.setDescription("test@HystrixCommand");
//		sekill.setId(1);
//		sekill.setName("test@HystrixCommand");
//		sekill.setNumber(100);
//		ls.add(sekill);
//		return ls;
//	}
}
